package cn.kgc.spring05.service.Impl;

import cn.kgc.spring05.mapper.UserMapper;
import cn.kgc.spring05.mapper.impl.UserMapperImpl;
import cn.kgc.spring05.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author: mosin
 * @version: v1.0  2022/12/1
 */
@Service
public class UserServiceImpl implements UserService {

    /**
     * @Autowired 默认是根据属性的类型进行注入  byType     要求在容器中该类型的对象要唯一
     * 1.@Qualifier("userMapperImpl")  注入时容器中的对象不唯一  可以通过该注解指定注入哪个对象
     * 2.可以将属性的名字进行修改 修改为和容器中某个bean的id值一样，注入时将会把该id对应的实例对象进行注入
     * 使用位置:
     * 1.CONSTRUCTOR
     * 2.METHOD
     * 3.FIELD
     * 4.PARAMETER
     * 5.ANNOTATION_TYPE
     *
     * 注解的使用位置决定注入的方式
     * 1.注解使用在属性上  类中可以不在提供该属性的set方法
     * 2.注解使用在属性的set方法上  属性的注入依赖该set方法
     * 如果容器中有多个相同类型的bean 则可以将Qualifier注解使用在参数上指定注入哪个bean  或者修改set方法参数的名字指定注入的bean
     *
     * required  默认为true
     * 属性必须赋值  否则报错 可是设置该属性的值为false  注入不成功则属性值赋值为Null
     */

    //@Autowired
    //@Qualifier("newUserMapperImpl")
    //private UserMapper userMapper;

    //@Autowired
    //private UserMapper userMapperImpl;

    //
    //@Autowired
    //public void setUserMapper(@Qualifier("userMapperImpl")UserMapper userMapper) {
    //    System.out.println("setUserMapper");
    //    this.userMapperImpl = userMapper;
    //}


    //@Autowired
    //public void setUserMapper(UserMapper userMapperImpl) {
    //    System.out.println("setUserMapper");
    //    this.userMapperImpl = userMapperImpl;
    //}

    /*
     *  @Resource  javax.annotation.Resource   默认根据属性名字进行注入  如果注入不成功则尝试根据类型注入  注入不成功抛出异常
     *  1. 设置Resource注解的name属性   指定输入哪个bean的实例对象
     * 2. 修改属性的名字 将名字修改为需要注入的bean的id值
     *
     * 使用该注解也可以不在提供属性的set方法
     * */
    @Autowired
    @Resource
    private UserMapper userMapperImpl;

    @Override
    public Boolean deleteById(Integer id) {
        System.out.println("userService被调用");
        Integer line = userMapperImpl.deleteById(id);
        return line > 0;
    }
}
